<template>
  <div>
    <h1>当前求和为：{{sum}}</h1>
    <h3>当前求和放大10倍为：{{bigSum}}</h3>
    <h3>我在{{school}}，学习{{subject}}</h3>
    <h3 style="color:red">Person组件的总人数是：{{personList.length}}</h3>
    <!-- 使用v-model.number将用户选择的数据转为数字 -->
    <select v-model.number="n">
      <option value="1">1</option>
      <option value="2">2</option>
      <option value="3">3</option>

      <!-- 使用v-bind将用户选择的数据转为数字类型 -->
      <!-- <option :value="1">1</option>
      <option :value="2">2</option>
      <option :value="3">3</option> -->
    </select>
    <button @click="increment(n)">+</button>
    <button @click="decrement(n)">-</button>
    <button @click="incrementOdd(n)">当前求和为奇数再加</button>
    <button @click="incrementWait(n)">等一等再加</button>
  </div>
</template>

<script>
import {mapState,mapGetters,mapMutations,mapActions} from 'vuex'
export default {
    name: "Count",
    data() {
      return {
        n:1, // 用户选择的数字
      }
    },
    computed:{


      // 靠程序员自己亲自去写计算属性  he、xuexiao、xueke（第一种写法）
     /*  sum(){
        return this.$store.state.sum
      },
      school(){
        return this.$store.state.school
      },
      subject(){
        return this.$store.state.subject
      }, */


      // ...是把对象mapState摊开放在计算属性中，实现如上代码的效果
      // 借助mapState生成计算属性，从state中读取数据。（对象写法）（第二种写法）
      // ...mapState({he:'sum',xuexiao:'school',xueke:'subject'}),

      // 借助mapState生成计算属性，从state中读取数据。（数组写法）（第三种写法）
      ...mapState(['sum','school','subject','personList']),


      /* ***************************************************************************** */
      // bigSum(){
      //   return this.$store.getters.bigSum
      // },

      // 借助mapGetters生成计算属性，从getters中读取数据。（对象写法）
      // ...mapGetters({bigSum:'bigSum'})

      // 借助mapGetters生成计算属性，从getters中读取数据。（数组写法）
      ...mapGetters(['bigSum'])


    },
    methods:{

      //程序员亲自写方法
      /* increment (){
        // this.$store.dispatch('jia',this.n)
        this.$store.commit('JIA',this.n)
      },
      decrement (){
        // this.$store.dispatch('jian',this.n)
        this.$store.commit('JIAN',this.n)
      }, */

      //借助mapMutations生成对应的方法，方法中会调用commit去联系mutations(对象写法)
      ...mapMutations({increment:'JIA',decrement:'JIAN'}),

      //借助mapMutations生成对应的方法，方法中会调用commit去联系mutations(数组写法)
			// ...mapMutations(['JIA','JIAN']),

      /* ************************************************* */

      //程序员亲自写方法
      /* incrementOdd (){
        this.$store.dispatch('jiaOdd',this.n)

        // if (this.$store.state.sum % 2) {
        //   this.$store.dispatch('jia',this.n)
        // }
      },
      incrementWait (){
        this.$store.dispatch('jiaWait',this.n)

        // setTimeout(() => {
        //     this.$store.dispatch('jia',this.n)
        // }, 500);
      }, */  

      //借助mapActions生成对应的方法，方法中会调用dispatch去联系actions(对象写法)
      ...mapActions({incrementOdd:'jiaOdd',incrementWait:'jiaWait'})

      //借助mapActions生成对应的方法，方法中会调用dispatch去联系actions(数组写法)
			// ...mapActions(['jiaOdd','jiaWait'])

    },
    mounted() {
      // console.log('Count',this);
      // const x = mapState({he:'sum',xuexiao:'school',xueke:'subject'})
			// console.log(x)
    }
}
</script>

<style lang="css">
button{
  margin-left: 10px;
}
</style>